docker/ubuntuにnginx-luajit入れる


概要

ソースコードから入れてビルドとかそのへん。

参考になるのはこれ。

lua-nginx-module

https://github.com/openresty/lua-nginx-module



まずubuntu自体をdocker machine内に用意

docker run --name="nginx-luajit-websocket-pubsuber" -it ubuntu:14.04 /bin/bash



一応、環境を最新のものにする

apt-get -y update

apt-get -y upgrade



/usr/src/に移動

cd /usr/src/



curlいれて

apt-get install curl



nginxのソース入れて

curl -O http://nginx.org/download/nginx-1.9.12.tar.gz



lua-nginx-moduleのソースを入れて

mkdir lua-nginx-module

cd lua-nginx-module

curl -L -O https://github.com/openresty/lua-nginx-module/archive/v0.10.2.tar.gz

cd ../



nginx-devel-kitをDL

mkdir nginx-devel-kit

cd nginx-devel-kit

curl -L -O https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz

cd ../



luajit入れる

DL元はここ。

http://luajit.org/download.html


curl -L -O http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz



いろいろ解凍

tar -xvzf nginx-1.9.12.tar.gz とか。落としたやつ全部その場に解凍。



Luajitをビルド

lualitをビルドするためにいろいろ入れる。

apt-get install make

apt-get install gcc


次のようなbuild.shを、LuaJIT-2.1.0-beta2フォルダ内に作成する。


build.sh

luajit_projectpath=$(pwd)

make

make install "PREFIX=$luajit_projectpath"



nginxをビルド

nginxが依存しているpcreとzlibをインストール

apt-get install libpcre3 libpcre3-dev

apt-get install zlib1g-dev


次のような内容のbuild.shを、usr/src/フォルダ直下に作成(行儀がわるい。


build.sh

PROJECT_PATH=$(pwd) #/usr/src


NGINX_VERSION=1.9.11


# luajit 2.1 is already built.

LUAJIT_FOLDER="LuaJIT-2.1.0-beta2"

cd $LUAJIT_FOLDER

sh build.sh

cd ../


# luajit required from Lua-nginx module. set export.

export LUAJIT_LIB=$PROJECT_PATH/$LUAJIT_FOLDER/lib

export LUAJIT_INC=$PROJECT_PATH/$LUAJIT_FOLDER/include/luajit-2.1


# same folder contains below.

NGX_DEVEL_KIT="/usr/src/nginx-devel-kit/ngx_devel_kit-0.2.19"

LUA_NGX_MOD="/usr/src/lua-nginx-module/lua-nginx-module-0.10.2"


cd nginx-1.9.12


# make & install nginx to PROJECT_PATH/NGINX_VERSION

./configure \

        --prefix=$PROJECT_PATH/$NGINX_VERSION \

        --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" \

        --add-module=$NGX_DEVEL_KIT \

        --add-module=$LUA_NGX_MOD


make -j2

make install

で、ビルドする。


cd /usr/src

sh build.sh

うまくいけばできるはず。



luaコード

WebSocketとかのコードを入れる。

docker-machine scp なんたら


luaコードはこちら

https://dl.dropboxusercontent.com/u/36583594/outsource/lua.zip


1.9.x/以下に置いて、luaフォルダとして解凍するだけ。



nginxのコンフィグ設定

1.9.x/conf/nginx.confを、luajitを使えるような形にいじる。

こんな感じ。

#user  nobody;

worker_processes  auto;


error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;


#pid        logs/nginx.pid;



events {

    worker_connections  1024;

}



http {

    include       mime.types;

    default_type  application/octet-stream;


    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    #                  '$status $body_bytes_sent "$http_referer" '

    #                  '"$http_user_agent" "$http_x_forwarded_for"';


    #access_log  logs/access.log  main;


    sendfile        on;

    #tcp_nopush     on;


    #keepalive_timeout  0;

    #keepalive_timeout  65;


    #gzip  on;

    # lua_code_cache off;


    # set search paths for pure Lua external libraries (';;' is the default path):

    lua_package_path ";;$prefix/lua/lib/?.lua;";


    # set search paths for Lua external libraries written in C (can also use ';;'):

    # lua_package_cpath ';;$prefix/lua/shared/?.so;';


    server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;


        #access_log  logs/host.access.log  main;


        location / {

            root   html;

            index  index.html index.htm;

        }


        # disque client route.

        location /disque_client {

                content_by_lua_file lua/disque_client.lua;

        }

    }

}

太字のところが特にnginx-luaの動作に必要な設定。

この状態で起動することができる。


起動した状態で、nginxの待ってるIPの80番ポート/disque_client にアクセスすると、WebSocket接続後、nginx-luaを経由してdisqueへと接続される。



別コンテナにdisque入れる

Disqueはここから仕入れてる。

https://github.com/antirez/disque/releases


curl -O -L https://github.com/antirez/disque/archive/1.0-rc1.tar.gz

tar -xvzf 1.0-rc1.tar.gz

apt-get install make

cd disque-1.0-rc1/

make



Disqueの起動

src/disque-serverを叩くと、デフォルト設定で起動する。

portは7711が使われている。

/usr/src/disque-1.0-rc1/src/disque-server